//
//  Extension+NSDate.swift
//  STVVeibo
//
//  Created by leergou on 16/7/26.
//  Copyright © 2016年 WhiteHouse. All rights reserved.
//

import UIKit

// 缓存数据删除时间
private let deleteTime: Double = -60*10

// 日历类
private let dateFormatter = NSDateFormatter()

private let calendar = NSCalendar.currentCalendar()
// NSDateFormatter 和 NSCalendar 类的创建和销毁比较消耗性能,因此在swift 中,定义一个常量,如果在 OC 中,则是采用单例

extension NSDate {
    
    // 定义类方法,返回清楚微博缓存 时间的字符串
    class func deleteCacheTimeStr() -> String {
        
        // 日期
        let date = NSDate().dateByAddingTimeInterval(deleteTime)
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        return dateFormatter.stringFromDate(date)
    }
    
    
    // 定义类方法 -- 传入一个日期字符串,返回一个格式化的日期
    class func getFormatDate(dateString: String) -> NSDate? {
        // 设置 locate 指定地区,如果不指定,在真机中时间会有问题
        dateFormatter.locale = NSLocale(localeIdentifier: "en_US")
        // 指定格式
        // 注意这个格式就这样写,否则 日期转出来 为 nil
        dateFormatter.dateFormat = "EEE MMM dd HH:mm:ss z yyyy"

        // Tue Jul 26 19:11:15 +0800 2019 // 测试用
        return dateFormatter.dateFromString(dateString)
    }
    
    //MAKR: 分类中只能用 计算型属性,不能用存储型属性
    // 获取 日期 字符串
    var dateDescription: String {
        // 定义一个属性, 来判断是否是今年
        let thisYear = isThisYear(self)
        // 是今年
        if thisYear {
            // 获取当前时间和指定时间的时间差
            let interval = (Int)(NSDate().timeIntervalSinceDate(self))
            // 判断是不是 今天
            if calendar.isDateInToday(self){
                // 是今天
                if interval < 60 {
                    return "刚刚"
                } else if interval >= 60 && interval <= 3600{
                    return "\(interval/60)分钟前"
                } else {
                    return "\(interval/3600)小时前"
                }
            } else if calendar.isDateInYesterday(self){
                // 是昨天
                dateFormatter.dateFormat = "昨天 HH:mm"
            } else {
                // 今年 的 其他情况
                dateFormatter.dateFormat = "MM月dd日 HH:mm"
            }
        } else {
            // 不是今年 - 显示 格式: 2015年01月01日 10:10
            dateFormatter.dateFormat = "yyyy年MM月dd日 HH:mm"
        }
        return dateFormatter.stringFromDate(self)
    }
    
    // 判断时间是否是今年
    func isThisYear(aDate: NSDate) -> Bool {
        // 设置 locate 指定地区,如果不指定 真机有时候时间会出问题
        dateFormatter.locale = NSLocale(localeIdentifier: "en_US")
        // 指定时间格式
        dateFormatter.dateFormat = "yyyy"
        // 获取当前的日期
        let currentDate = NSDate()
        // 指定时间字符串
        let aDateString = dateFormatter.stringFromDate(aDate)
        // 当前日子字符串
        let currentDateString = dateFormatter.stringFromDate(currentDate)
        
        return aDateString == currentDateString
    }
    
    
}















